LINUX.ORG.RU

Vim или Emacs? А LISP в 2021?

 , ,


1

3

https://www.youtube.com/watch?v=8Q9YjXgK38I&t=42s

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

А ведь Crashbandicoot была годной игрой…

Что выбрать? Vim или Emacs?
Изучать в 2021 году Lisp? Если изучать, какой? Практика?
А не засмеют сотрудики?

Времени в сутках маловато, на всё не хватает.


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

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

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

ну так-то язык интересный. и я не утверждал, что на хачкеле нельзя написать шахматы, их нельзя описать с помощью математических закорючек… а интересен он тем, что он как не от мира сего как пролог какой-то. я только не могу представить а вообще нахрен он был придуман. тот же лисп - это просто польская нотация: не надо о приоритетах думать, легко интрепретатор написать, язык очень простой… ну просто самое простое и очевидное решение. этот язык гениален в своей простоте. у каждого языка есть своя область. питон - замена баша, язык для обучения (конечно, его вытеснил из школы scratch), вся эта шиза с мат анализом и статистикой, ой извините, датасаенс… ну еще на нем любой пряморукий сисьадмин может сделать сайт. ок. C# - виндовая тема. Java - кровавый ынтырпрайз, древний как говно мамонта, ибо появившись на свет в 1996, он успел на себя подсадить всех… Это Раби эпохи доткомов. На нем написано столько кода, что его уже не переписать на модном Rust. C - для ядер и драйверов, C++ - для игор и пррограмм с интерфейсом. PHP - для дорвеев, продающих страниц и недомагазинов на Джумле. Node.js - новая Java для хипстеров-смузихлебов… Я намеренно не упомянул про почившие в бозе Perl и Ruby (царствие им ребесное, надеюсь не воскреснут). И вот куда хачкель засунуть?

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

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

Можно. Но по мере роста сложности типов внезапно окажется, что строки хаскеля почему-то в разы длиннее аналогичных сишных.

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

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

Это примерно как написание проекта на 10 млн строк. У меня уже заметки по объему приближаются к миллиону — и здесь проблемой становится найти нужное «то же место, не теряя контекста». С ума сойти, сколько годов я прожил и сколько всяких вещей узнал.

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

К сожалению (или к счастью), думать за тебя он пока еще не может.

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

byko3y ★★★ ()
Ответ на: комментарий от no-such-file

Хасель это просто про другое мышление. Настолько другое, что даже задачи нужно ставить по-другому. Если пытаться писать программы в духе «напечатай hello, напечатай world» то конечно это будет боль и страдание

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

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

Императивное программирование не является единственным способом решения практических задач. Проблема не в императивщине, а в том, что чисто функциональное программирование в стиле хаскеля потрясающе бесполезно. Хотя, реализации в виде лиспа (clojure) или какого-нибудь F# вполне себе юзабельны — потому что они не скатываются до абстрактного маразма. Или возьми React.js, который вполне себе функционально-декларативен. Сейчас реактивно-асинхронный стиль программирования вообще очень популярен, а ведь это тоже далеко не чистая императивщина.

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

в лиспе сплошные «ехали функции через скобки»

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

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

read имеет тип String -> a и если a не может быть выведен из контекста, его нужно указывать явно. А для этого не нужно никакое глубокое понимание системы типов именно Хаскелла

Сначала не понял, о чем ты, а потом убрал аннотации типа у read. Тредик, энджой ошибку компилятора:

prog.hs:7:3: error:
    • Ambiguous type variable ‘a0’ arising from a use of ‘read’
      prevents the constraint ‘(Read a0)’ from being solved.
      Probable fix: use a type annotation to specify what ‘a0’ should be.
      These potential instances exist:
        instance Read a => Read (IO a) -- Defined at prog.hs:1:10
        instance Read Ordering -- Defined in ‘GHC.Read’
        instance Read Integer -- Defined in ‘GHC.Read’
        ...plus 23 others
        ...plus 9 instances involving out-of-scope types
        (use -fprint-potential-instances to see them all)
    • In a stmt of a 'do' block: read "123"
      In the expression:
        do read "123"
           print "Hello"
           x <- read "123"
           print $ "World" ++ show x
           ....
      In an equation for ‘main’:
          main
            = do read "123"
                 print "Hello"
                 x <- read "123"
                 ....
  |
7 |   read "123"
  |   ^^^^^^^^^^

prog.hs:9:8: error:
    • Ambiguous type variable ‘a1’ arising from a use of ‘read’
      prevents the constraint ‘(Read a1)’ from being solved.
      Probable fix: use a type annotation to specify what ‘a1’ should be.
      These potential instances exist:
        instance Read a => Read (IO a) -- Defined at prog.hs:1:10
        instance Read Ordering -- Defined in ‘GHC.Read’
        instance Read Integer -- Defined in ‘GHC.Read’
        ...plus 23 others
        ...plus 9 instances involving out-of-scope types
        (use -fprint-potential-instances to see them all)
    • In a stmt of a 'do' block: x <- read "123"
      In the expression:
        do read "123"
           print "Hello"
           x <- read "123"
           print $ "World" ++ show x
           ....
      In an equation for ‘main’:
          main
            = do read "123"
                 print "Hello"
                 x <- read "123"
                 ....
  |
9 |   x <- read "123"
  |        ^^^^^^^^^^

prog.hs:10:22: error:
    • Ambiguous type variable ‘a1’ arising from a use of ‘show’
      prevents the constraint ‘(Show a1)’ from being solved.
      Relevant bindings include x :: a1 (bound at prog.hs:9:3)
      Probable fix: use a type annotation to specify what ‘a1’ should be.
      These potential instances exist:
        instance Show Ordering -- Defined in ‘GHC.Show’
        instance Show Integer -- Defined in ‘GHC.Show’
        instance Show a => Show (Maybe a) -- Defined in ‘GHC.Show’
        ...plus 22 others
        ...plus 20 instances involving out-of-scope types
        (use -fprint-potential-instances to see them all)
    • In the second argument of ‘(++)’, namely ‘show x’
      In the second argument of ‘($)’, namely ‘"World" ++ show x’
      In a stmt of a 'do' block: print $ "World" ++ show x
   |
10 |   print $ "World" ++ show x
   |                      ^^^^^^
byko3y ★★★ ()
Ответ на: комментарий от Puzan

которые как незаметный фон.

Я стал изучать, нет, не незаметный. Скобки - вызов? Или я ошибаюсь?

Вот тут парниша клёво втирал: https://www.youtube.com/watch?v=OyfBQmvr2Hc

Лень смотреть? Я вырезал по врепмени - https://youtu.be/OyfBQmvr2Hc?t=2480

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

Пхах, а скобочки ты не считаешь? И нет, они важны, потому что иначе их придется заменять переносами строк.

Считаю. А в питоне считаю переносы строк.

Вот тоже лисп:

defun lsp--number->color (number)
  let <* result format("%x" round{{number or 0} * 255.0}) *>
    if {1 = length(result)}
       concat "0" result
       result

в лиспе сплошные «ехали функции через скобки»

Как двумя строками убрать в лиспе скобки я показал.

Уже ответил выше с примером ошибки.

Ошибки не от монад, а от полиморфизма. В Си++

#include <vector>
#include <algorithm>
int main()
{
    int a;
    std::vector< std::vector <int> > v;
    std::vector< std::vector <int> >::const_iterator it = std::find( v.begin(), v.end(), a );
}

гораздо страшнее пишет (там более 15 тысяч строк).

Ты серьезно считаешь, что пример с list comprehension читается сложнее, чем рябь из вызовов функций?

Я считаю, что list comprehension читается значительно хуже, чем написанное человеческим языком

(loop for i from 1 to 10
      for j from 100
      collect (list i j))

Вариант с yield не спасает, так как ещё и нормальный оператор цикла нужен (с несколькими переменными).

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

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

Функции с переменным числом параметров тоже есть. Попробуй любой из этих макросов изобразить в виде функции.

здесь — для условной компиляции при отсутствии пакета json.

Что, опять же, невозможно сделать функциями. В Си ifdef на функции тоже не заменить.

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

А вы не пробовали свой канал на ютубе завести? Говорят, жанр «блоггер бесится при обзоре чего-нибудь» очень популярен

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

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

90% сорцов IDE — картинки, шрифты, доки, конфиги, локализации, и JS-based редактор кода CodeMirror, как вишенка на торте. И полтора мегабайта кода на хаскеле (примерно 25 тысяч строк).

Так нынче так принято. На других языках вообще целиком браузер затягивают. А тех полутора мегабайт достаточно для работы.

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

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

Сложных типов в Си не бывает. Но строки длиннее, потому что, например,

while(*i++ = *j++);

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

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

в лиспе сплошные «ехали функции через скобки».

Это не в лиспе, это в схеме жеж!

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

Таки что тебе не нравится?

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

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

он как не от мира сего как пролог какой-то. я только не могу представить а вообще нахрен он был придуман

Пролог — это максимум дичь. Слава богу, что он умер. Всё, что делает пролог — переставляет местами результат функции с ее аргументами. Зачем придумал? Прост.

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

Brainfuck тоже очень простой, есть еще MUMPS, как диалект Brainfuck. Это исходноки реальной системы, которая до сих пор эксплуатируется:

https://github.com/WorldVistA/VistA-M/blob/master/Packages/Accounts Receivabl...

И это только малая часть одного 140 пакетов системы. SAP по сравнению с этим покажется эталоном изящности.

И вот куда хачкель засунуть?

Туда же, куда все остальные эзотерические языки.

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

Туда же, куда все остальные эзотерические языки.

Нравится клеить модельки? Клей! Кто тебе мешает?
Я тебя спрошу так - как ты планируешь развиваться, если ты только клеить умеешь? Человек без опыта не может придумать новое, нужна база. Ты не можешь сравнить, если не попробуешь новое.

Кто тебе сказал, что ООП, особенно в том виде, как его пихают, единственно верное или удобное?

Далее… Какие ты задачи решаешь, парниша? Есть то, что нигде, НИГДЕ не описано, подсмотреть негде. И в объект не засунешь.

Ну да ладно. Если что, не хотел обидеть (или хотел?)

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

Я стал изучать, нет, не незаметный

Дело привычки

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

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

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

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

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

Так классика же: Парадокс Блаба. Поэтому нужен и Lisp и Haskell и Forth. Писать на них не обязательно, но подход может пригодиться при декомпозиции задачи на любом языке.

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

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

Находишь по ключевым словам заметку про медведей (или про реакторы), просматриваешь ссылки — вот она, здоровенная заметка моей мечты про медведей и реакторы. Профит.

Бумажки с ящиками лучше компьютера!

Whatever floats your boat, как говорится. У компьютерных заметок все-таки есть ряд преимуществ. Бэкапы, поиск по тексту, а не только по ссылкам, удобство редактирования, отсутствие ограничений на размер заметки и так далее.

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

Пролог — это максимум дичь. Слава богу, что он умер

Не совсем, datalog остался.

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

Вот тоже лисп:
let <* result format(«%x» round{{number or 0} * 255.0}) *>

Ну что это такое? Там всего на три строчки функция, и уже... Или мне приводить пример посложнее?

Ошибки не от монад, а от полиморфизма. В Си++
гораздо страшнее пишет (там более 15 тысяч строк)

500 строк ошибок у меня. Я же не спорю. Чрезмерная полиморфичность — это бич современного IT. По статистике, порядка 10-30% функций в средней по больнице программе полиморфичны:

https://en.wikipedia.org/wiki/Multiple_dispatch#Use_in_practice

А множественный полиморфизм и вовсе занимает единицы процентов. Но пишутся программы так, будто полиморфичным будет всё на свете. Вот и получаем 500 строчек ошибок.

Я считаю, что list comprehension читается значительно хуже, чем написанное человеческим языком
(loop for i from 1 to 10
for j from 100
collect (list i j))

Эм-м-м... я сейчас поднял доки по схеме, кложе — а там нет таких циклов. Попытался найти в SBCL реализацию макроса «loop» — а ево нету. Это встроенная в компилятор конструкция, с развитой семантикой, и есть она только в CL — ни в одном другом лиспе я ее не нашел. Именно из-за наличия семантики у циклов CL циклы на нем выглядят более-менее человечно. Причем, семантика у циклов так весьма и весьма развитая:
https://www.cs.cmu.edu/Groups/AI/html/cltl/clm/node244.html
И таки я одобряю это. Правда, это же нерасширяемо и приколочено гвоздями, ведь на макросах такого повторить нельзя — это разве настоящий лисп?

Ну и да, про недостатки list comprehension питона я уже написал.

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

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

здесь — для условной компиляции при отсутствии пакета json

Что, опять же, невозможно сделать функциями. В Си ifdef на функции тоже не заменить

Питон спокойно справляется без макросов в таких же сценариях. И даже JS справляется. А Лисп, видите ли, не может и всё тут.

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

А не пробовал английский подтянуть?

Куда подтянуть? Да, у меня есть проблемы с произношением — они точно так же есть даже на русском. Всё никак не рожу поставить произношение на обоих.

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

Так нынче так принято. На других языках вообще целиком браузер затягивают. А тех полутора мегабайт достаточно для работы

Так проблема в том, что это не IDE на хаскеле — это IDE на JavaScript со скриптами на хаскеле.

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

Тогда попробуйте поставить свой путунхуа.

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

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

Сложных типов в Си не бывает

Чо-о? "((sometype*)&p->abc[idx].fld)->val". Удачи переписывать на хаскеле в одну строку.

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

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

Мне не нравится, что это HELLO WORLD. Да, тут выше показали красивый Hello World на STL, но тот факт, что кресты — говно, не оправдывает хаскель. По крайней мере, на крестах можно писать работающие приложения — хотя бы это его адвокатирует.

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

Мне не нравится, что это HELLO WORLD.

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

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

Алгол-60 был всем чужд

Алгол был чужд IBM, потому что у IBM в дополнение к фортранам, коболам и куче ассемблеров был свой «универсальный» PL/I с сопрограммами, многозадачностью и множеством других наворотов императивщины.

Мейнфреймам с неайбиэмовской архитектурой Алгол был не чужд.

А Алгол-68 был, очевидно, не чужд автору прообраза bash:

LOCAL VOID	prsym(sym)
{
	IF sym&SYMFLG
	THEN	REG SYSPTR	sp=reserved;
		WHILE sp->sysval
			ANDF sp->sysval!=sym
		DO sp++ OD
		prs(sp->sysnam);
	ELIF sym==EOFSYM
	THEN	prs(endoffile);
	ELSE	IF sym&SYMREP THEN prc(sym) FI
		IF sym==NL
		THEN	prs("newline");
		ELSE	prc(sym);
		FI
	FI
}

https://minnie.tuhs.org/cgi-bin/utree.pl?file=V7/usr/src/cmd/sh/cmd.c

Си пришлось раскрутить, потому что Кену Томпсону ранее не удалось портировать Фортран на PDP-7 за одну итерацию.

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

На ФОРТРАНе – физики, на КОБОЛе – бухши.

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

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

У моей родственницы в университете был чуть ли не годовой курс русскоязычного КОБОЛа с практикой в университетском ВЦ, когда она в 1980-х получала финансово-экономическое образование.

А у соседей-геофизиков лабораторки были исключительно на FORTRAN77, никаких тебе Сипаскалей или PL/I.

Так что мой опыт подтверждает процитированное Вами наблюдение.

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

Что значит «закрыв»?

Как так происходит, что у тебя ОДНОВРЕМЕННО открыто по 300-400 вкладок? Крайне сомневаюсь, что ты правишь их одновременно. А открыть их из дерева проекта не проблема. Так зачем держать открытыми столько вкладок?

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

Кто тебе сказал, что ООП, особенно в том виде, как его пихают, единственно верное или удобное?

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

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

Эзотерические языки — это прикольно, потому что позволяет взглянуть на привычные вещи по-другому. Но я не буду писать СУБД на брейнфаке за деньги.

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

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

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

«медведь» — 15 hits в 4 files
«реактор» — 12 hits in 4 files

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

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

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

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

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

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

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

По факту я вижу только что индустрия доказала, что лисп не нужен

Такишо? Если индустрии не нужен, не значит, что другим не нужен. Мне, например, приносит удовольствие писать на схеме. А индустрии нужно только то, что приносит деньги, желательно вчера.

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

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

Ну так ССБЗ же.

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

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

Ты мне серьезно хочешь сказать, что ты понял эту хаскелеву дичь, принцип работы типокласса Read, монадическое связывание, да? И у тебя вызвали трудность заполнение двухмерного массива в JS.

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

Алгол был чужд IBM, потому что у IBM в дополнение к фортранам, коболам и куче ассемблеров был свой «универсальный» PL/I с сопрограммами, многозадачностью и множеством других наворотов императивщины

PL/I был производным Алгола-60. И они решали ту же задачу — как сделать алгол практически применимым. Правда, как это всегда и происходило у IBM, получился монструозный перегруженный ад.

Мейнфреймам с неайбиэмовской архитектурой Алгол был не чужд

Разве онные не пытались максимально мимикрировать под всякие IBM/360?

Си пришлось раскрутить, потому что Кену Томпсону ранее не удалось портировать Фортран на PDP-7 за одну итерацию

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

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

ты понял эту хаскелеву дичь

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

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

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

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

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

Notepad++

при этом плохой имакс, лисп и орг-мод…? сильно.

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

Мне, например, приносит удовольствие писать на схеме. А индустрии нужно только то, что приносит деньги, желательно вчера

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

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

Notepad++

при этом плохой имакс, лисп и орг-мод…? сильно

Да, это сорта говна. Я не помню, когда бы у меня возникало желание «эх, сейчас бы свернуть вот этот блок», или «вот тут бы табличку вставить», или «здесь бы вот текст выделить мальца». Для простых заметок со ссылками Notepad++ сам автоматом выделяет ссылки и умеет искать по ним — всё, что большее мне может предложить орг-мод? Бритва Оккама же ж. Как только я найду более удобный инструмент — я сразу прыгну на него. Но я не вижу более удобных инструментов.

byko3y ★★★ ()
Закрыто добавление комментариев для недавно зарегистрированных пользователей (со score < 50)