কোন প্রোগ্রামিং ভাষায় প্রথম "প্রদর্শিত" প্রদর্শিত হয়েছিল?


24

আমি লিস্প, ক্লোজার এবং হাস্কেলের ব্যবহৃত "লেট" এর উত্স সম্পর্কে ভাবছিলাম। কেউ কি জানেন যে এটি কোন ভাষায় প্রথম প্রকাশিত হয়েছিল?


এসেম্ব্লার 1954 সাল থেকে এলইটির পরিবর্তে এমওভি ব্যবহার করে it এটি কি যথেষ্ট নয়?
গাংনাস

1
LISP একজন ভাল প্রার্থী হওয়ার জন্য যথেষ্ট বয়স্ক।
mouviciel

2
যে প্রশ্নের জন্য "এক্স প্রথমে কোন প্রোগ্রামিং ভাষায় উপস্থিত হয়েছিল" লিস্প একটি সঠিক উত্তরের জন্য বেশ ভাল অনুমান
জ্যাচারি কে

2
আসুন উত্সগুলি গণিত থেকে আসা, অন্য প্রোগ্রামিং ভাষার থেকে নয়।
পিটার বি

আপনি ভুল অনুমানটি করেন যে প্রোগ্রামিং ভাষাতে "লেট" এর প্রথম ব্যবহারটি লিস্প, ক্লোজার এবং হাস্কেলের "লেট" -র উৎপত্তি।
পিটার বি

উত্তর:


41

ঠিক আছে, বেসিকের ১৯ 19৪LET সালের শুরু থেকেই সিনট্যাক্সের অংশ হিসাবে অ্যাসাইনমেন্ট ছিল , সুতরাং এটি letলিস্পে ব্যবহারের পূর্বাভাস দিতে পারে , যা ক্রিস জেস্টার-ইয়ং পয়েন্ট হিসাবে লিস্টের বিবর্তন অনুসারে ১৯s০ এর দশক পর্যন্ত উপস্থিত হয়নি ।

আমি বিশ্বাস করি না কোবোল, ফোর্টরান, বা ALGOL এর LETবাক্য বিন্যাসে রয়েছে। সুতরাং আমি বেসিক সঙ্গে যেতে যাচ্ছি।


11
তবে শব্দার্থক letশব্দগুলি খুব আলাদা - মৌলিকভাবে একটি লাক্ষিকভাবে স্কোপযুক্ত বাঁধাই নয়। সুতরাং, সঠিক উত্তরটি হ'ল "এটি ইংরেজীতে প্রথম প্রকাশিত হয়েছিল, দ্বাদশ শতাব্দীর আগে"।
এসকে-যুক্তি

12
তবে প্রশ্নগুলি হ'ল: " প্রোগ্রামটি " প্রথমে কোন প্রোগ্রামিং ভাষা প্রদর্শিত হয়েছিল? আমি আসলেই ইংরেজিকে একটি প্রোগ্রামিং ভাষা বিবেচনা করি না (অন্তত এই প্রসঙ্গে)।
গ্রেগ

7
letএই প্রসঙ্গে ( letx নিম্নলিখিত বর্ণনার isকিছু in) প্রথমে ইংরেজিতে গাণিতিক পাঠগুলিতে উপস্থিত হয়েছিল এবং এটিই প্রোগ্রামিংয়ে এসেছিল। আমি আনুষ্ঠানিক সিস্টেম - গাণিতিক ভাষা, প্রোগ্রামিং ল্যাঙ্গুয়েজ, অন্য যে কোনও কিছুতে কোনও পার্থক্য দেখছি না - সেগুলি সব একই।
এসকে-লজিক

3
"লেট এক্স ইজ 3" সঠিক ব্যাকরণ নয়। আপনি এটি কোনও ইংরেজী পাঠ্য বইয়ে দেখতে পাবেন না। "হওয়া" ক্রিয়াপদটির আপনার ভুল কালীন আছে। এটি "X 3 হতে দিন" বা "3 x সমান 3" হওয়া উচিত। যেভাবেই হোক শব্দার্থবিজ্ঞান হোক বা না হোক, প্রশ্ন লেখক একটি প্রোগ্রামিং ভাষা চাইছিলেন। সুতরাং আপনি যদি এমন কোনও কম্পিউটার সম্পর্কে জানেন না যা বেসিকের পূর্বাভাস দেয় এমন ইংরেজি নির্দেশনা গ্রহণ করে, আমি এটি কিনছি না। অন্যথায়, আমরা স্রেফ "স্যুইডো-কোড" এর উত্তর দিতে পারতাম এবং এটি বৈধ হবে তবে তার প্রশ্নের আত্মাকে সম্মান জানাবে না।
গ্রেগ

1
অবশ্যই আমি এমএল স্বরলিপি ব্যবহার করেছি, এবং আমি বোঝাতে চাইছি equals, না is। এবং, হ্যাঁ, সিউডো-কোডই এখন পর্যন্ত সেরা উত্তর।
এসকে-লজিক

30

আমি একটি তাত্ত্বিক দৃষ্টিভঙ্গি যুক্ত করতে চাই: শাস্ত্রীয় ল্যাম্বদা ক্যালকুলিতে letকেবল সিনট্যাকটিক চিনি। উদাহরণ স্বরূপ

let x = N in M

সহজভাবে লিখতে পারেন

(λx.M)N

সুতরাং প্রথম দিকের (ক্রিয়ামূলক) ভাষায় এর প্রথম উপস্থিতিটি আকর্ষণীয় নয়।

যাইহোক, এটি হিন্ডলি-মিলনার টাইপ সিস্টেমের আবিষ্কার এবং এর ধরণের ইনফারেন্স অ্যালগরিদমের সাথে খুব গুরুত্বপূর্ণ হয়ে ওঠে । এই ধরণের সিস্টেমে letঅপরিহার্য, কারণ এটি বহুকর্মী (এইচএম-তে অ্যাবস্ট্রাকশন এর বিপরীতে)। উদাহরণস্বরূপ, এই সহজ অভিব্যক্তি বিবেচনা করুন:

let id = λx . x in id id

এখানে idপলিমারফিক রয়েছে, এটি টাইপ করে ∀α.α → αএবং তাই id idটাইপ-চেকস রয়েছে - এটি টাইপটি id id : τ → τনির্বিচারে τ (প্রথম জন্য idআমরা বরাদ্দ τ → τকরার αএবং দ্বিতীয় জন্য idআমরা বরাদ্দ τজন্য α।)

যাইহোক, আমরা st বিমূর্ততা এবং অ্যাপ্লিকেশন ব্যবহার করে এটি পুনরায় লিখতে পারি না। অভিব্যক্তি

(λid . id id)(λx.x)

টাইপ-চেক করে না, কারণ প্রথম λ বিমূর্তের মধ্যে idঅবশ্যই id : σকিছু for এর জন্য মনোমর্ফিক টাইপ করা উচিত , এবং এমন কোনও নেই যা আমরা প্রয়োগ id : σকরতে পারি id : σ

আপনি এটি হাস্কেলের মধ্যে নিজে চেষ্টা করতে পারেন। let id = \x -> x in id id :: t -> tটাইপ-চেক চলাকালীন টাইপিং (\id -> id id)(\x -> x)ব্যর্থ হয়

দেখা যায়: অসীম প্রকারটি নির্মাণ করতে পারে না: t0 = t0 -> t0
প্রথম যুক্তিতে id, যথা id
অভিব্যক্তিতে: id id
প্রকাশে:\id -> id id


খুব আকর্ষণীয় উত্তরের জন্য +1। পার্শ্বের বিষয় হিসাবে, যদি আপনি কোনও জানেন তবে আপনি "সিনট্যাকটিক চিনির" একটি কঠোর সংজ্ঞার জন্য একটি রেফারেন্স পোস্ট করতে পারেন (একটি মন্তব্যে, কারণ এটি মূল প্রশ্নের সাথে সম্পর্কিত নয়)।
জর্জিও

3
@ জর্জিও নতুন হ্যাকারের অভিধানটির উদ্ধৃতি দিতে : একটি ভাষা বা অন্যান্য ফর্মালিজমের সাথে মানুষের বৈশিষ্ট্যগুলিকে "মিষ্টি" তৈরি করার বৈশিষ্ট্যগুলি যুক্ত করা হয়েছে, এমন বৈশিষ্ট্য যা আনুষ্ঠানিকতার প্রকাশকে প্রভাবিত করে না। ব্যবহৃত এসএসপি। যখন স্বীকৃতিতে ইতিমধ্যে উপস্থিত অন্যান্য কাঠামোতে "চিনি" বৈশিষ্ট্যটির স্পষ্ট এবং তুচ্ছ অনুবাদ রয়েছে translation সি এর a[i]স্বরলিপি সিনট্যাকটিক চিনি *(a + i) উইকিপিডিয়া নিবন্ধটিরও একটি সুন্দর ব্যাখ্যা রয়েছে।
পেটর পুদলক

3
আকর্ষণীয় স্টাফ তবে খুব কমই এর সাথে letপরিচিতি
ভাইরবেল

2
এটি একটি ভাল লিখিত উত্তর, তবে এটি মূল প্রশ্নের উত্তর দেয় না।
জোহান কার্লসন

1
@ জোহানকার্লসন আমি দাবি করছি না এটি প্রত্যক্ষ উত্তর, তবে আমি মনে করি এটি বিষয়টির সাথেও প্রাসঙ্গিক। বিশেষ করে কেন হয়েছিল letচালু, যেমন প্রশ্ন শুরু হয়েছে ... আমি "দিন" উদ্ভব সম্পর্কে হতাশ ছিল
পেত্র Pudlák

22

লিস্প হ'ল এখন এলইটি থাকার প্রাচীনতম ভাষা । তবে বেসিকই প্রথম এটি পেয়েছিল কারণ লিস্প এটি পরে পেয়েছিল।

অ্যাডা লাভলেস অ্যানালিটিক্যাল ইঞ্জিনে (1843) - কোনও এলইটি নেই, কোনও প্রোগ্রামের মতো দেখাচ্ছে:

N0 6 N1 1 N2 1 × L1 L0 S1  L0 L2 S0 L2 L0 CB?11 '

জিউজের প্লানকালাল (1943-45) এ প্রোগ্রামটি দেখেছে:

P1 max3 (V0[:8.0],V1[:8.0],V2[:8.0]) → R0[:8.0]
max(V0[:8.0],V1[:8.0]) → Z1[:8.0]
max(Z1[:8.0],V2[:8.0]) → R0[:8.0]
END

জন মাউচলি 1949 সালে শর্ট কোড প্রস্তাব করেছিলেন

X3 =  (  X1 +  Y1 )  /  X1 * Y1   

অ্যাসাইনমেন্টের জন্য ব্যবহৃত 1950 সালের বার্কের মধ্যবর্তী পিএল ->

1952 সালে Rutishauser ব্যবহৃত =>=

Bmshms সংকলক, 1952, ব্যবহৃত ->

ম্যানচেস্টার বিশ্ববিদ্যালয়ে, অ্যালিক গ্লেনি Autocode1950 এর দশকের গোড়ার দিকে বিকশিত হয়েছিল। প্রথম কোড এবং সংকলকটি ম্যানচেস্টার ইউনিভার্সিটিতে মার্ক 1 কম্পিউটারের জন্য 1952 সালে তৈরি করা হয়েছিল এবং এটি প্রথম সংকলিত উচ্চ-স্তরের প্রোগ্রামিং ভাষা হিসাবে বিবেচিত হয়। আবার, ->অ্যাসাইনমেন্টের জন্য

চার্লস অ্যাডামস, ব্যাকাসের গ্রুপের ফোরট্রান 0, ব্রুকারের অটোকোড 2, লুবিমস্কি এবং কামিনিনের 1-1; সব 1954 সালে, আবার=

বেকাক (গ্রীস, পোর্টার), 1954, *নিয়োগের জন্য!

কমপাইলার, ADES, 1955, =

আইটি, 1956, <-

ফরট্রান, 1957, =

এটি -3 (1956), ম্যাথ-ম্যাটিক (1957), আবার =,

তবে ১৯৫7 সালে ফ্লো-ম্যাটিকের দুটি অ্যাসাইনমেন্ট ছিল এবং দুটোই কথায় আছে

TRANSFER a TO b এবং MOVE a TO b

বাউর এবং স্যামেলসনের মেশিন, 1957: =>


দুঃখিত, আমি 1957 এবং 1964 এর মধ্যে সমস্ত ভাষা কভার করতে পারি না, তবে আরও বৃহত্তর ভাষা

1957 - COMTRAN (forerunner to COBOL)
1958 - LISP
1958 - ALGOL 58
1959 - FACT (forerunner to COBOL)
1959 - COBOL
1959 - RPG
1962 - APL
1962 - Simula
1962 - SNOBOL
1963 - CPL (forerunner to C)

অ্যাসাইনমেন্টের জন্য এলইটি নেই বা এলআইএসপি ক্ষেত্রে ছিল না


ডার্টমাউথ বেসিক বেসিক প্রোগ্রামিং ভাষার মূল সংস্করণ। প্রথম ইন্টারেক্টিভ সংস্করণটি সাধারণ ব্যবহারকারীদের জন্য 1964 সালের জুনে উপলব্ধ করা হয়েছিল ;

 LET / = — assign formula results to a variable

14

ঠিক আছে, এই তিনজনের মধ্যে, লিস্পের অবশ্যই এটি প্রথম ছিল। Haskell, 80s সম্পর্কে এসে 00s মধ্যে Clojure, এবং letপ্রায় ছিল দীর্ঘ আগে পারেন সেই তারিখ। :-)

করা হবে কিনা তা পাতার মর্মর ছিল হিসাবে ভাষাটি এটিকে আবিষ্কার করেছে, আমি এখনও সমর্থন জানাতে পারি না, কিন্তু আমি কিছু গবেষণা করতে এবং দেখতে পাবেন। :-)

আপডেট: লিস্পের বিবর্তন অনুসারে (পৃষ্ঠা 46 দেখুন), এটি উল্লেখ করেছে যে let70 এর দশকে আবিষ্কার হয়েছিল:

LET- প্রতিটি সাইটে প্রথমে ম্যাক্রো স্থানীয়ভাবে উদ্ভাবিত এবং পুনরায় উদ্ভাবিত the ম্যাকলিস্প বিশ্বে দেরিতে আগত; লিসপ আর্কাইভ অনুসারে, এটি 1979 সালে লিস্প-মেশিন লিস্প থেকে পিডিপি -10 ম্যাকলিস্পে এবং একই DEFMACROসাথে জটিল লিস্প মেশিনের DEFUNআর্গুমেন্ট সিনট্যাক্সের সাথে সংশোধিত হয়েছিল।

এটি এর আগে অন্য কোনও ভাষায় আবিষ্কার হয়েছিল কিনা তা এখনও পুরোপুরি উত্তর দেয় না, তবে আরও একটি ডেটা পয়েন্ট। :-)


4
এমএল 70 এর দশকেও বিকাশিত হয়েছিল তাই সম্ভবত এই ধারণাটি এম এল এবং লিস্প উভয় ক্ষেত্রেই সেই সময়ের মধ্যে চালু হয়েছিল।
জর্জিও

9

1978 সালের জানুয়ারী থেকে প্রথম সংশোধিত প্রকল্পের রিপোর্ট এআইএম -452 রয়েছে LET। পৃষ্ঠা 9।

লক্ষ করুন যে লিস্প এর আগে PROGস্থানীয় ভেরিয়েবলগুলি প্রবর্তন করতে একটি ভিন্ন নির্মাণ ব্যবহার করেছিল ।

(let ((a 1)
      (b 1))
  (+ a b))

প্রায় আগে হিসাবে লেখা হত

(prog (a b)
  (setq a 1)
  (setq b 1)
  (+ a b))

letলিস্পের উপভাষায় সর্বদা লেক্সিকালি স্কোপ করা হত ?
ওয়ার্লবেল

1
এআইএম -452 হ'ল স্কিমের প্রথম সংশোধিত প্রতিবেদন। প্রথম প্রতিবেদনটি 1977 সাল থেকে এআইএম-349 And এবং এআইএম -৪৮৮ সংশোধিত সংশোধিত প্রতিবেদন। এবং তারপরে যাকে "সংশোধিত ^ 3" প্রতিবেদন বলা হয় (অর্থাত্ প্রথম "আর R এনআরএস" নামকরণ ব্যবহার করার জন্য) প্রথম এটি এআইএম নয় বরং একটি প্রকৃত ভাষার স্পেসিফিকেশন। কিছুটা গুগল করলে আপনি এই সমস্ত নথির পিডিএফ খুঁজে পাবেন যাতে আপনি সেগুলি নিজের জন্য পড়তে পারেন। আপনি যদি আরও পিছনে যেতে চান তবে আপনি সফ্টওয়্যার সংরক্ষণ গ্রুপ থেকে একটি পুরাতন ম্যাকলিস্প ম্যানুয়াল খুঁজে পেতে পারেন এবং সম্ভবত আপনি কিছু এলআইএসপি 1.5 টি প্রতিবেদনও খুঁজে পেতে সক্ষম হবেন।
টেলানুব

@ ভাইরবেল, এটি লেসিকাল letস্কোপিং (স্কিম, '75) হিসাবে প্রায় পুরানো বলে মনে হয়েছে এবং গ্রহণযোগ্যতা পেতে লেক্সিকাল স্কোপিংয়ের জন্য এটি কিছুটা সময় নিয়েছে, তাই আমি অনুমান করব যে প্রথম উদাহরণগুলি letগতিশীল স্কোপড লিস্পসের প্রসঙ্গে ছিল। আজ, ইমাস লিস্পের ডিফল্টরূপে এখনও গতিশীল সুযোগ রয়েছে lambdaএবং এর সাথে let( পূর্বেরের পক্ষে চিনিটি যাইহোক) তাদের প্যারামিটারগুলি গতিশীলভাবে আবদ্ধ করে।
টেলানুব
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.