LINUX.ORG.RU

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


5

3

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

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

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

★★★★

Хватило бы комбинаторной логики (SK). На ней можно построить все остальное (в том числе и императивные, и объектные, и параллельные концепции продемонстрировать).

Короче, всем учить язык Unlambda.

anonymous
()

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

Выдыхай...

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

На ней можно построить все остальное

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

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

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

CL во все поля

ты не заметил «хорошо реализующих», костыли с аргументацией «вы ничего не понимаете, настоящее ООП/ФП/etc. выглядит именно так» не катят

wota ★★
()

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

Те, за которые будут тебе платить?

mopsene ★★★
()

forth, lisp, smalltalk, какой-нибудь ml

lazyklimm ★★★★★
()

lisp же!

удваиваю lisposhrach!

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

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

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

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

более чем спорное утверждение, ну да ладно - ТС, если я правильно понял, хотел другого

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

pure C, ML, prolog, smalltalk

Я склоняюсь к подобному же. Но без лиспа ведь не получится метапрограммирования? =)

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

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

Как насчёт статичной типизации?

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

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

Имхо, нужно как можно быстрее окунуться в сам процесс разработки на чем-нибудь одном. Когда уже будет понимание проблематики, можно будет углубляться в базовые концепции. Можно начать с того же питона. Не зря в MIT им заменяют схему.

dizza ★★★★★
()

ESR предлагает: C, Perl, Python, Java, Lisp. Но это слишком утилитарный подход, сплошные пересечения.

В MIT, где-то читал, так: asm, C, Python, Haskell, Lisp. Но зачем, например, си, если есть ассемблер?

У Норвига примерно так: Java, Lisp, Prolog, Icon/Scheme, Sisal. Самый интересный вариант.

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

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

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

А где связь между языковыми концепциями и обучением программированию?

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

Разумеется, в выбранный язык нужно погрузиться на какое-то время, «верхи» ничего не дадут.

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

Как можно откладывать на потом _базовые_ концепции?

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

Как насчёт статичной типизации?

А какие трудности? ML поверх Лиспа строится элементарно. Как и вообще любой другой язык.

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

Тем не менее для обучения программированию это будут оптимальные варианты.
Ещё, наверное, стоит добавить какой-нибудь динамический язык вроде Python-а или JavaScript-а.

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

это примерно тоже самое, что и спросить какая книга имеет самое полное и формально точное описание грамматики английского

Нет. В этой аналогии я бы спросил, какие выбрать книги, чтобы в них были отработаны (~ часто встречались) все элементы грамматики. Формальные описания на первых порах действительно не нужны.

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

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

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

ML поверх Лиспа строится элементарно. Как и вообще любой другой язык.

Это будет уже ML, а не лисп.

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

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

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

Я бы посоветовал Racket. В нем ты сможешь писать в вообще любой парадигме+будешь иметь возможность писать макросы (читай расширить язык до любого состояния - все зависит только от тяжески и количества упорина). Ну и масса батареек для него.

З.Ы.: Сразу скажу, что С++ - не нужен, сейчас «крестовики» «набигут» и станут с пеной у рта утверждать что он и Ъ-ООП, и Ъ-ФЯ, и еще черт знает что. Не слушай. С++ - ошибка природы.

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

Это будет уже ML, а не лисп.

Построенный, как минимальное и тривиальное расширение Лиспа.

В этом-то и заключается главный смысл метапрограммирования. С ним можно строить любые языки, встраиваемые в host-язык.

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

Такие трансляторы можно строить только в языках с полноценным метапрограммированием.

И именно на основе метапрограммирования лучше всего изучать семантику языков.

anonymous
()

Всё просто.

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

Таких яп единицы, из которых вменяемый только СИ. Поэтому связка Си/асм - это основа всех остальных ЯП и основа всех «концепций».

Плюй также в рожу всем, кто будет тебе доказывать, что его «мегаяп» имеет какую-то фичу( безопасность, ООП, ГЦ, НЕТЕЧЁТ 146% и т.п.), которой нет в СИ, ибо он /0.

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

З.Ы.: Сразу скажу, что С++ - не нужен,

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

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

Python как первый язык ужасен. Он приучает писать плохой код. И извращает представление о концепциях. В нем у тех же классов толком не реализована концепция сообщений, например.

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

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

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

unC0Rr ★★★★★
()
Ответ на: Всё просто. от otnnte

На это не способны абсалютно все ЯП с гц, вм etc, поэтому плюй в рожу любому, кто орёт про цл, жава, хаскель, пхп и т.п.

Чушь. Ничто не мешает генерить нативный код внутри языка с GC. Тот же LLVM отлично работает с OCaml или даже F#, например.

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

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

Для работы на низком уровне с памятью - есть Asm и PureC. Остальное не нужно.

Ты ламер и тупица. Повторяю для тупых: RAII - очень важная концепция, которую обязаны понимать все разработчики языков и рантаймов. И именно на C++ ее можно освоить в наиболее чистом виде, именно в C++ она наиболее развита и наиболее идиоматически применяется.

anonymous
()
Ответ на: Всё просто. от otnnte

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

anonymous
()

Осваивай Питон и не понтуйся умными словами.

Kindly_Cat
()

Без троллинга.

С - системное программирование, управление памятью

Java/C# - ООП, практики разработки, управление кодом, организация кода

Haskell/Scheme - функциональное программирование

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

Можно еще пробежаться по Prolog

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

Только ты зафейлил, код на языке с ГЦ не запутится без ГЦ, а ГЦ ты не напишешь на ЯП с ГЦ. Если ты будешь гинерить нативный код, то это уже не реализация самого языка на себе, а гинератор другого ЯП, в данном случае «нативного».

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

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

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

Так и запишем - вы ООП не знаете (в С++ - неполная и уродская реализация), топик ТС не читали вообще. Ему не нужен язык для написания своего языка, он не является разработчиком языка - ему нужен язык для обучения. Концепцию RAII при обучению программированию зачем затрагивать? Ее наличие в «программе обучения» можно оправдать только желанием объяснить как на низком уровне работает высокоуровневая программа, а для этого есть Asm и Си, которые напрямую работают с память. Повторюсь - С++ не нужен.

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