LINUX.ORG.RU

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


5

3

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

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

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

★★★★

Ответ на: комментарий от qulinxao

тебе ДОЛЖНО быть известно что repl лиспа( lisp 1.5 макарти и его сырец eval-apply как его там исполнителя)со всем его GC помещается в считаное число килобайт (если не в полторы килобайта) в отличии от специально заточенного для уменьшения обьёма кода компилятора с (tcc).

tcc с поддержкой C99, сам написанный на С, а не на асме, умеющий несколько платформ, как программных так и аппаратных, различные «выхлопы», с дополнительными «фишками», оптимизациями и пр., уместней сравнивать с sbcl или ecl, а ты сравниваешь теплое с мягким

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

я привёл пример человеку утверждающему , что всякая языковая машина содержащая в себе GC по определению жирнее чем языковая машина С святого Д.Ричи и Кернигана проповедника его.

. что несколько не осторожно утверждать.

из очевидного факта что языковая машина X содержащая GC жирнее языковой машины Y(X-GC) следует что лисп(1.5) жирнее С у лиц не имеющих представления о чём они .

qulinxao ★★☆
()

Из тех, с которыми более-менее хорошо знаком:

C, scheme (или Racket, но здесь я пока новичок), prolog.

И добавил бы ещё те, которые знаю слабо:

Forth, Smalltalk

И тот, до которого никак руки не доходят:

один из диалектов ML

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

вот это вот заведомое саморазоблачение otnnte :

Базовый язык - это тот, на котором можно написать «всё», включая «сам» ЯП.

111111111111

На это не способны абсалютно все ЯП с гц

11111111111111

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

Я реалист.

А что будет рулить кучей? Код на Си/асм? Я не спорю, что через хак и кастыль можно ГЦ в рекурсию не вогнать, но - это уже хак и кастыль.

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

тебе ДОЛЖНО быть известно что repl лиспа( lisp 1.5 макарти и его сырец eval-apply как его там исполнителя)со всем его GC помещается в считаное число килобайт (если не в полторы килобайта) в отличии от специально заточенного для уменьшения обьёма кода компилятора с (tcc).

Вот тут ты не прав. tcc не создан маленьким - он заточен на скорость компиляции. Он просто маленький, ибо у него нет монтрозаумного оптимизатора и стопицот тыщ фич.

Примитивный Си компилятор впихнётся в 1.5кб.

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

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

Ну так ты напиздел. Можно написать, легко.

Примитивный Си компилятор впихнётся в 1.5кб.

В 1.5кб даже парсер не поместится. У Си слишком ублюдочно сложный синтаксис.

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

Спасибо. У меня этих «введений» и «курсов» по разным MLам уже полный каталог и длинный список закладок в спец.подразделе. Это вопрос времени, а не недостатка информации. :)

Как говорится, всё необходимое уже есть, надо только начать.

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

Да блин . покажи что ты впихнёш в 1.5кб бинаря ( ок ок байтовой машины z80) по максимуму - что бы всё остальное можно было бы реализовать именно в синтаксисе этого примитивС_1.5кб без прямого писания в память машкодовых последовательностей т.е давай двух этапный С компилятор выкати нулевая фаза(размером 1.5кб) на входе имеет свой примитивС_1.5кб на выходе исполняемый код(допустимого формата для исполнения под какойнить проц ) и первая фаза( тут можеш не изгалятся - а что бы просто работало) на входе С(любого тебе одного удобного стандарта) ,а на выходе сырец в синтаксесе примитивС_1.5кб

ну и очевидно что бы исполняемы код получаемый из С сырца исполнял бы С сырец.

тебе просто должно быть понятно ( либо своим умом(что хорошо) либо знанием заповеди( что не есть так уж хорошо)) , что языки без синтаксиса (lisp fort) по определению свои интерпретаторы/трансляторы имеют меньшего размера чем компилятор С

посмотри что ли какие примитивные С компиляторы были в 70ых на pdp и на микро(домашних) компах там не было с размером 5 кб там был бэйсик(да будет проклят тот день,когда его стали покупать) размером 5 кб.

qulinxao ★★☆
()

C (asm) для изучения основных моментов машинки.

Питон и жаба для собственно программирования.

JS и прочая эзотерика для извращений.

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

Не то слово! Тут как минимум шизофрения.

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

сори, я забыл pls.

я про тут не обязательно в самом - просто отсутствие двойного цитирования ( присутствие однократного) в ответе на мой коменарий позволяет недобросовестное зубоскаленье :)

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

Посмотрел я этот ваш Common Lisp. В общем и целом понравилось, разве что скобки немного раздражают. Однако, понятия не имею, где его применить. Ну кроме использования подчерпнутых в ходе изучения приемов ФП, которые, надо признать, иногда полезны.

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

Отлично, приходите на какую-нибудь программерскую конференцию, и став посреди зала кричите «пасаны, программирование - это просто планирование, расходимся»

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

мне очень нравится упоминать и ссылатся на «Программирование вторая грамотность» («Programming is second literacy » для асоциации с literacy programming Кнута - которое грамотное(литературное) программирование.).

но да в таком отдалении:

письмо - есть способ фиксации мысли , чтение - есть способ получения_извлечения сведений(включая чьи либо мысли)

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

программирование - умение формулировать процедуры для исполнения идеальными(т.е верными в интерпритации указаний) исполнителями.

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

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

расходится рано ибо программирование как и атом неисчерпаемо.

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

Только вот никому такой абстрактный составитель планов в вакууме не нужен. А нужен инженер с достаточно широким набором навыков.

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

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

т.к оказывается , что составитель_планов_в_вакууме ( реалистичных (т.е адекватных наличным ресурсам)) , не обязательно ограничит область своей деятельности бизнес_программированием|оптимизацией_числодробилок - вот и оказывается очередное проявлением принципа Питера

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

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

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

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

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

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

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

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

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

Если бы да кабы... История по спирали развивается, знаешь ли. Помнишь спектрумы и БК всякие с системным бейсиком? Заметь, не Си, не ассемблером, а именно бейсиком. Сейчас, похоже, опять наступило время системных языков высокого уровня. И JS среди нынешнего зоопарка - не питон, конечно, но всё равно далеко не наихудший кандидат на его роль. Тем более что он уже и в серверсайде успешно юзается (всяко лучше днищенского пхп и моднявого руби) и показывает неплохие результаты по производительности.

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

Заметь, не Си, не ассемблером, а именно бейсиком.

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

Тем более что он уже и в серверсайде успешно юзается

NodeJS — чья-то злая шутка. Писать на нём что-то сложнее многопользовательского хеллоуворлда я бы не стал.

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

NodeJS — чья-то злая шутка. Писать на нём что-то сложнее многопользовательского хеллоуворлда я бы не стал.

А пробовал? Я-то писал, точно скажу, что питоновские Bottle и Tornado удобнее, но назвать ноду чем-то неюзабельным язык не поворачивается. jQuery-хомячкам это действительно может показаться чем-то диким, но это их проблемы, они сами продались в рабство. А так это просто JS как он есть, ничего страшного или сложного замечено не было.

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

Помнишь спектрумы и БК всякие с системным бейсиком? Заметь, не Си, не ассемблером, а именно бейсиком

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

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

А так это просто JS как он есть, ничего страшного или сложного замечено не было.

Однопоточный JS. С логикой на коллбаках.

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

Фигасе для обучения. То же самое, что сейчас сказать, что bash у нас в линуксе исключительно для обучения и жутко тормозит. :)

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

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

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

Фигасе для обучения. То же самое, что сейчас сказать, что bash у нас в линуксе исключительно для обучения и жутко тормозит. :)

bash ты же не назовешь «системным ЯП»

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

Смотря что понимать под системным. Если бы не Поттеринг, башелюбы бы всё на баше переписали, не только инит.

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

Тормозил, да. Но бейсик использовался простыми смертными, которые на компьютере… считали (compute), ага.

а что считали? если школьные примеры - это и есть обучение, если что-то серьезное - стоило брать как минимум «Поиск», чтоб с кассетами головной боли не иметь

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

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

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

по такому определению даже перл системным назвать можно

В дебиане, к сожалению, так и есть.

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

Памятника не надо, я всё равно так не сделаю, но я это всё к тому, что в качестве оболочки можно не только bash (zsh, tcsh, etc) определить, но теоретически любой интерпретируемый язык. Он же от этого системным не станет.

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

Одного определения интерпретируемого языка в качестве оболочки недостаточно. Надо, чтоб на него были завязаны системные компоненты. В дебиане пёрл и баш вполне себе системные языки, ибо на баше написан инит, а на перле - apt, без которого дебиан не дебиан. В генте, емнип, портаж на питоне написан? Значит, питон там тоже один из системных языков. Ну и так далее.

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

вся системность тех бэйсиков наличие save/load/peek/poke/GOSUB на бинкод.

оно было интерактивным шелом в первую голову и весило в пределах 16 кб.

ну и типо не настолько требует(вало) новых навыков как форт(с его постфикснустью) и лисп(с его рекурсией и префикснутостью)

а так были домашнии компы как с фортом прошитым в ROM

( тот же Поиск имел Вариант поставки с касетой с фортом вместо касеты бэйсика)

и лиспы тоже .

тока рядовыем бэйсик понятней , на то он и бэйсик что бы потакать.

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

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

попридираюсь - а что на спектруме было написано на бейсике?

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

Ок, если принять такое «расширенное» определение системного языка.

Правда, изначально-то речь шла о встроенных асме и басике. :)

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

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

ну и второе любой шел в составе которого есть возможность запуска софта тоже есть системный язык

и тогда

SHELL=/usr/bin/ed

отличный шел и системный язык ( вроде так оно и было в своё время логин после авторизации пускал ed)

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